package es.project.sien7e.main.services;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.validation.Valid;

import org.springframework.stereotype.Service;

import es.project.sien7e.main.PMF;
import es.project.sien7e.main.model.Municipio;
import es.project.sien7e.main.model.Provincia;

@Service
public class MunicipioServiceImpl implements MunicipioService {

	@SuppressWarnings("unchecked")
	@Override
	public List<Municipio> getMunicipios() throws SQLException {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Query query = pm.newQuery(Municipio.class);
		query.setOrdering("municipio asc, id asc");
		return (List<Municipio>) query.execute();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Municipio> getMunicipios(Provincia provincia)
			throws SQLException {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<Municipio> result = new ArrayList<Municipio>();
		List<Municipio> list = null;
		Municipio reg1 = new Municipio();
		Query query = pm.newQuery(Municipio.class);
		if (provincia != null) {
			query.setFilter("provincias == param");
			query.setOrdering("municipio asc, id asc");
			query.declareParameters("Long param");
			list = (List<Municipio>) query.execute(provincia.getId());
		} else {
			query.setOrdering("municipio asc, id asc");
			list = (List<Municipio>) query.execute();
		}
		reg1.setId((long) 0);
		result.add(reg1);
		result.addAll(list);
		return result;
	}

	@Override
	public Municipio grabaMunicipios(@Valid Municipio obj) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Municipio obj2 = null;
		if (obj.getProvincias() == 0)
			obj.setProvincias(null);
		try {
			obj2 = pm.makePersistent(obj);
		} finally {
			pm.close();
		}
		return obj2;
	}

	@Override
	public Municipio insertaMunicipios(@Valid Municipio obj) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Municipio obj2 = null;
		if (obj.getProvincias() == 0)
			obj.setProvincias(null);
		try {
			obj2 = pm.makePersistent(obj);
		} finally {
			pm.close();
		}
		return obj2;
	}

	@Override
	public Integer borrarMunicipios(@Valid Municipio obj) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Integer val = 0;
		try {
			pm.deletePersistent(obj);
			val = 1;
		} finally {
			pm.close();
		}
		return val;
	}
}
